package com.centerm.bluetooth.jf.listener;

import android.bluetooth.BluetoothDevice;

/**
 * Created by linwenhui on 2017/5/6.
 */

public interface CSwiperStateChangedListener {
    /**
     * 开始检测/连接音频回调
     */
    void onAudioDetectStart();

    /**
     * 正在绑定/连接蓝牙回调
     */
    void onBluetoothBounding();

    /**
     * 检测到音频刷卡器回调
     */
    void onAudioDetected();

    /**
     * 蓝牙绑定/连接成功回调
     */
    void onBluetoothBounded();

    /**
     * 连接刷卡器超时等其他因素回调（蓝牙、音频）
     */
    void onConnectTimeout();

    /**
     * 获取ksn回调（蓝牙、音频）
     *
     * @param ksn
     */
    void onGetKsnCompleted(String ksn);

    /**
     * 等待刷卡、插卡、挥卡回调（蓝牙、音频）
     */
    void onWaitingForCardSwipe();

    /**
     * 检测到刷卡刷磁道回调
     */
    void onDetectTrack();

    /**
     * 检测到刷卡插入IC卡回调
     */
    void onDetectIC();

    /**
     * 开始解码回调
     */
    void onDecodingStart();

    /**
     * 解码过程中出现的错误/失败回调。errorFlag错误码
     *
     * @param errorFlag
     */
    void onDecodeError(int errorFlag);

    /**
     * 刷卡(磁条/IC/挥卡)超时等其他因素回调
     */
    void onSwipeCardTimeout();

    /**
     * 刷卡成功回调，至此，刷卡器交易完成
     * @param formatID 保留,暂时不用
     * @param ksn 终端编号(20位终端号+16位PSAM卡号),如果没有设备编号可使用IMEI替代
     * @param encTracks 加密的磁道数据
     * @param track1Length 磁道1数据长度(没有加密数据为0)
     * @param track2Length 磁道2数据长度(没有加密数据为0)
     * @param track3Length 磁道3数据长度(没有加密数据为0)
     * @param randomNumber 磁道随机数
     * @param maskedPAN 卡号
     * @param expiryDate 过期日期
     * @param cardHolderName 持卡人姓名
     * @param cardType 刷卡类型(0：磁条，1:IC卡做IC交易，2:IC卡做降级交易)
     * @param cardMAC 卡MAC数据(计算出来的4字节MAC数据+4个字节的MAC随机数）
     * @param iccData 密文(加密方式见下文6.IcData加密)
     * @param isIC 是否刷了IC卡
     * @param pinblock 密码（24位密码+FF+交易流水号，空密码时24位密码传24个F）
     * @param handBrushWay 手刷方式(手刷磁条:100101,手刷IC:100102,非接挥卡:100103)
     */
    void onDecodeCompleted(String formatID, String ksn, String encTracks, int track1Length, int track2Length, int track3Length, String randomNumber, String maskedPAN, String expiryDate, String cardHolderName, String cardType, String cardMAC, String iccData, boolean isIC, String pinblock, String handBrushWay);

    /**
     * IC回写
     * @param result
     * @param resultScript
     * @param data
     */
    void onICResponse(int result, byte[] resultScript, byte[] data);

    /**
     * 错误回调
     * @param errorCode
     * @param error
     */
    void onError(int errorCode, String error);

    /**
     * 操作中断。电量不足、手机来电等意外造成的刷卡中断的回调。
     */
    void onInterrupted();

    /**
     * 交易取消
     */
    void onTradeCancel();

    void onDeviceFind(BluetoothDevice device);


}
